package asem.ast.sentencias;

import asem.TablaSimbolos;
import asem.ast.expresiones.NodoExpresion;
import asem.excepciones.ExcepcionTipoRetorno;
import asem.tablaSimbolos.Metodo;
import asem.tablaSimbolos.tipo.Tipo;
import asem.tablaSimbolos.tipo.TipoMetodo;
import asem.tablaSimbolos.tipo.TipoVoid;

public class NodoReturn extends NodoSentencia {
	protected NodoExpresion expRetorno;

	public NodoReturn(NodoExpresion exp) {
		expRetorno = exp;
	}
	
	public void chequeoSentencias()
	{
		TablaSimbolos tabla = TablaSimbolos.getInstance();
		Metodo metodoActual = tabla.metodoActual();
		TipoMetodo tipoMetodoActual = metodoActual.getRetorno();
		if (expRetorno == null)
		{
			if (! (tipoMetodoActual instanceof TipoVoid))
				throw new ExcepcionTipoRetorno(metodoActual.getNombre());
		}
		else
		{
			Tipo tipoExpresionRetorno = (Tipo) expRetorno.chequeoSentencias();
			if (!tipoExpresionRetorno.compatible((Tipo) metodoActual.getRetorno()))
				throw new ExcepcionTipoRetorno(metodoActual.getNombre(), metodoActual.getRetorno().toString());
		}
	}
}
